OpenCamLib (OCL) is an open source library aiming to provide computer aided manufacturing (CAM) algorithms. FreeCAD uses OCL in the experimental 3D Surface path operations and other experimental features.
Github: https://github.com/aewallin/opencamlib
Website: http://www.anderswallin.net/CAM/
Note: Beginning with FreeCAD version 0.19, OCL should be included with all Windows distribution packages.
To install OCL on Windows, follow these instructions.
The repository is here and contains basic installation instructions.
Before beginning installation, or during the installation process, you will probably find you need to install some additional packages:
For example:
sudo apt install cmake
sudo apt install libboost-program-options-dev
# Optional, for documentation:
sudo apt-get install doxygen
sudo apt-get install texlive-full
Note: the "libboost-program-options-dev" may be substituted with "libboost-all-dev".
If you are struggling, carefully review any error messages you get during the cmake and make phases as you may need to install additional packages.
import sys
sys.path.append('/usr/opencamlib/')
import ocl
Identify the version of cmake you have installed with cmake --version
For cmake >= 3.12, add these flags:
cmake -DBUILD_PY_LIB=ON -DUSE_PY_3=ON -DCMAKE_BUILD_TYPE=Release ../src -Wno-dev
For cmake < 3.12 (like in Ubuntu 18.04, which has 3.10), first you'll need to edit src/pythonlib/pythonlib.cmake
, and apply this patch:
Index: opencamlib-2019.07/src/pythonlib/pythonlib.cmake =================================================================== --- opencamlib-2019.07.orig/src/pythonlib/pythonlib.cmake +++ opencamlib-2019.07/src/pythonlib/pythonlib.cmake @@ -48,13 +48,13 @@ if(${CMAKE_VERSION} VERSION_LESS "3.12.0 message("Python not found") endif() execute_process( - COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(0,0,\"/usr/local\")" + COMMAND ${PYTHON_EXECUTABLE} -c "import site; print(site.getsitepackages()[-1])" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE ) # on Ubuntu 11.10 this outputs: /usr/local/lib/python2.7/dist-packages execute_process( - COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(plat_specific=1,standard_lib=0,prefix=\"/usr/local\")" + COMMAND ${PYTHON_EXECUTABLE} -c "import site; print(site.getsitepackages()[-1])" OUTPUT_VARIABLE PYTHON_ARCH_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE )
Then, in order for Python 3 to be detected correctly you'll need to add 2 more flags to the cmake line:
cmake -DBUILD_PY_LIB=ON -DUSE_PY_3=ON -DPYTHON_EXECUTABLE="$(which python3)" -DPYTHON_VERSION_SUFFIX=3 -DCMAKE_BUILD_TYPE=Release ../src -Wno-dev
See the FreeCAD forum at Re: How to activate openCamLib after compiling it, and a few posts following.
git clone https://github.com/aewallin/opencamlib
cd opencamlib
mkdir build
cd build
cmake -DBUILD_PY_LIB=ON -DUSE_PY_3=ON -DCMAKE_BUILD_TYPE=Release .. -Wno-dev
make -j4
make install
To test the build enter the following in the Python console:
import area
import ocl
dir(ocl)
The return value should be:
['AdaptivePathDropCutter', 'AdaptivePathDropCutter_base', 'AdaptiveWaterline', 'AdaptiveWaterline_base', 'Arc', 'ArcSpanType', 'BallConeCutter', 'BallCutter', 'BatchDropCutter', 'BatchDropCutter_base', 'BatchPushCutter', 'BatchPushCutter_base', 'Bbox', 'BullConeCutter', 'BullCutter', 'CCPoint', 'CCType', 'CLPoint', 'CompBallCutter', 'CompCylCutter', 'ConeConeCutter', 'ConeCutter', 'CutterLocationSurface', 'CylConeCutter', 'CylCutter', 'Ellipse', 'EllipsePosition', 'Fiber', 'Fiber_base', 'Interval', 'Line', 'LineCLFilter', 'LineCLFilter_base', 'LineSpanType', 'MillingCutter', 'Path', 'PathDropCutter', 'PathDropCutter_base', 'Path_base', 'Point', 'STLReader', 'STLSurf', 'STLSurf_base', 'SpanType', 'Triangle', 'Triangle_base', 'Waterline', 'Waterline_base', 'WeaveVertexType', 'ZigZag', 'ZigZag_base', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'eps', 'epsD', 'epsF', 'version']
In case of an error the return value will be:
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
For cmake the Release option is very important, when using Debug area and ocl will collide and either library will not load (depending on what what was loaded first).
In case you run into difficulties, you may find additional help at these forum posts:
Thank you to Dr. Anders Wallin for providing OCL to the public.